package com.bnz.test;

import com.alibaba.druid.pool.DruidDataSource;
import com.bnz.entity.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.sql.SQLException;

// 运用spring-test依赖
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("classpath:spring/beand_1.xml")
public class StuTest_1 {

//    // 注入实体类对象
//    @Autowired
//    private Student student;

    // 1、测试spring/beand_1.xml中，第一个bean
    // bean标签的演示
    @Test
    public void test01() {
        // 1.1、加载Spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_1.xml");
        // 1.2、获取到指定文件的bean
        Student stu = (Student) aa.getBean("stu");// stu是里面bean的id
        System.out.println("第一个bean加载的学生信息: " + stu);
        aa.close();
    }

    // 2、运用输入了spring-test依赖的用法
//    @Test
//    public void test02(){
//        System.out.println("student: " + student);
//    }


    // 3、为属性注入值--->方法一，使用setter方式
    @Test
    public void test03() {
        // 3.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_2.xml");
        Student stu = (Student) aa.getBean("stu");
        System.out.println("学生信息(使用setter方式)：" + stu);
    }

    // 4、为属性注入值--->方法二，使用构造注入值
    @Test
    public void test04() {
        // 4.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_2.xml");
        Student stu2 = (Student) aa.getBean("stu2");
        System.out.println("学生信息(使用构造注入值): " + stu2);
    }

    // 5、通过p名称空间为属性注入值-->方法3
    @Test
    public void test05() {
        // 5.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_2.xml");
        Student stu3 = (Student) aa.getBean("stu3");
        System.out.println("学生信息(p标签):  " + stu3);
    }

    // 6、测试工厂创建对象(静态)
    @Test
    public void test06() {
        // 6.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_1.xml");
        // 6.2、获取到指定文件的bean
        Object stu2 = aa.getBean("stu2");
        System.out.println("工厂创建的对象(静态)：" + stu2);
    }

    // 7、测试非静态工厂创建的对象
    @Test
    public void test07(){
        // 7.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_1.xml");
        // 7.2、获取到指定文件的bean
        Object stu3 = aa.getBean("stu3");
        System.out.println("非静态方法创建的对象: " + stu3);
    }

    // 8、测试赋值属性值的注入（beand_3.xml）
    @Test
    public void test08(){
        // 8.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_3.xml");
        // 8.2、获取指定文件的bean
        Object ct = aa.getBean("ct");
        System.out.println("赋值属性的注入: " + ct);
    }

    // 9、利用属性文件读取数据库的连接
    @Test
    public void test09() throws SQLException {
        // 9.1、加载spring容器
        ClassPathXmlApplicationContext aa = new ClassPathXmlApplicationContext("spring/beand_4.xml");
        // 9.2、获取指定文件的bean
        DruidDataSource datad = (DruidDataSource) aa.getBean("datad");
        System.out.println("数据库的连接获取 " + datad.getConnection());

    }

}
